package com.hh.matrixQuestions;

/**
 * @Author hanghao
 * @Date 2023/6/29 16:00
 * @Version 1.0
 * 旋转图像
 * middle
 * 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
 * 你必须在 原地 旋转图像，这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像
 *
 * 123          741
 * 456     ->   852
 * 789          963
 */

public class No48 {
    public void rotate(int[][] matrix) {
        if(matrix.length == 0 || matrix.length != matrix[0].length) {
            return;
        }
        int nums = matrix.length;  //边长
        int n = 0;            //层数  第n层框 框的长度为 len = nums - n * 2
        while (n <= (nums >> 1)) {
            int len = nums - (n << 1);
            for (int i = 0; i < len - 1; i++) {
                int temp = matrix[n][n + i];                        //matrix[a][b]  a是行   b是列
                matrix[n][n + i] = matrix[n + len - i - 1][n];
                matrix[n + len - i - 1][n] = matrix[n + len - 1][n + len - i - 1];
                matrix[n + len - 1][n + len - i - 1] = matrix[n + 1][n + len -1];
                matrix[n + i][n + len - 1] = temp;
            }
        }
    }
}
